var runtime.sched
390 uses
runtime (current package)
cgocall.go#L296: hz := sched.profilehz
debug.go#L21: lock(&sched.lock)
debug.go#L23: unlock(&sched.lock)
debugcall.go#L226: lock(&sched.lock)
debugcall.go#L228: unlock(&sched.lock)
metrics.go#L286: hist.counts[0] = atomic.Load64(&sched.timeToRun.underflow)
metrics.go#L287: for i := range sched.timeToRun.counts {
metrics.go#L288: hist.counts[i+1] = atomic.Load64(&sched.timeToRun.counts[i])
mgc.go#L1006: totalCpu := sched.totaltime + (now-sched.procresizetime)*int64(gomaxprocs)
mgc.go#L1284: lock(&sched.lock)
mgc.go#L1286: unlock(&sched.lock)
mgc.go#L1555: lock(&sched.sudoglock)
mgc.go#L1557: for sg = sched.sudogcache; sg != nil; sg = sgnext {
mgc.go#L1561: sched.sudogcache = nil
mgc.go#L1562: unlock(&sched.sudoglock)
mgc.go#L1566: lock(&sched.deferlock)
mgc.go#L1570: for d = sched.deferpool; d != nil; d = dlink {
mgc.go#L1574: sched.deferpool = nil
mgc.go#L1575: unlock(&sched.deferlock)
mgcmark.go#L298: lock(&sched.gFree.lock)
mgcmark.go#L299: list := sched.gFree.stack
mgcmark.go#L300: sched.gFree.stack = gList{}
mgcmark.go#L301: unlock(&sched.gFree.lock)
mgcmark.go#L318: lock(&sched.gFree.lock)
mgcmark.go#L319: sched.gFree.noStack.pushAll(q)
mgcmark.go#L320: unlock(&sched.gFree.lock)
mgcmark.go#L1042: for !(gp.preempt && (preemptible || atomic.Load(&sched.gcwaiting) != 0)) {
mgcmark.go#L1056: for !(gp.preempt && (preemptible || atomic.Load(&sched.gcwaiting) != 0)) {
panic.go#L313: if len(pp.deferpool) == 0 && sched.deferpool != nil {
panic.go#L314: lock(&sched.deferlock)
panic.go#L315: for len(pp.deferpool) < cap(pp.deferpool)/2 && sched.deferpool != nil {
panic.go#L316: d := sched.deferpool
panic.go#L317: sched.deferpool = d.link
panic.go#L321: unlock(&sched.deferlock)
panic.go#L379: lock(&sched.deferlock)
panic.go#L380: last.link = sched.deferpool
panic.go#L381: sched.deferpool = first
panic.go#L382: unlock(&sched.deferlock)
proc.go#L389: lock(&sched.sudoglock)
proc.go#L391: for len(pp.sudogcache) < cap(pp.sudogcache)/2 && sched.sudogcache != nil {
proc.go#L392: s := sched.sudogcache
proc.go#L393: sched.sudogcache = s.next
proc.go#L397: unlock(&sched.sudoglock)
proc.go#L455: lock(&sched.sudoglock)
proc.go#L456: last.next = sched.sudogcache
proc.go#L457: sched.sudogcache = first
proc.go#L458: unlock(&sched.sudoglock)
proc.go#L657: lockInit(&sched.lock, lockRankSched)
proc.go#L658: lockInit(&sched.sysmonlock, lockRankSysmon)
proc.go#L659: lockInit(&sched.deferlock, lockRankDefer)
proc.go#L660: lockInit(&sched.sudoglock, lockRankSudog)
proc.go#L684: sched.maxmcount = 10000
proc.go#L704: if offset := unsafe.Offsetof(sched.timeToRun); offset%8 != 0 {
proc.go#L714: lock(&sched.lock)
proc.go#L715: sched.lastpoll = uint64(nanotime())
proc.go#L723: unlock(&sched.lock)
proc.go#L759: assertLockHeld(&sched.lock)
proc.go#L761: if mcount() > sched.maxmcount {
proc.go#L762: print("runtime: program exceeds ", sched.maxmcount, "-thread limit\n")
proc.go#L772: assertLockHeld(&sched.lock)
proc.go#L774: if sched.mnext+1 < sched.mnext {
proc.go#L777: id := sched.mnext
proc.go#L778: sched.mnext++
proc.go#L792: lock(&sched.lock)
proc.go#L825: unlock(&sched.lock)
proc.go#L881: sched.stopwait = freezeStopWait
proc.go#L882: atomic.Store(&sched.gcwaiting, 1)
proc.go#L1020: sched.timeToRun.record(gp.runnableTime)
proc.go#L1183: lock(&sched.lock)
proc.go#L1184: sched.stopwait = gomaxprocs
proc.go#L1185: atomic.Store(&sched.gcwaiting, 1)
proc.go#L1189: sched.stopwait--
proc.go#L1199: sched.stopwait--
proc.go#L1209: sched.stopwait--
proc.go#L1211: wait := sched.stopwait > 0
proc.go#L1212: unlock(&sched.lock)
proc.go#L1218: if notetsleep(&sched.stopnote, 100*1000) {
proc.go#L1219: noteclear(&sched.stopnote)
proc.go#L1228: if sched.stopwait != 0 {
proc.go#L1260: lock(&sched.lock)
proc.go#L1268: sched.gcwaiting = 0
proc.go#L1269: if sched.sysmonwait != 0 {
proc.go#L1270: sched.sysmonwait = 0
proc.go#L1271: notewakeup(&sched.sysmonnote)
proc.go#L1273: unlock(&sched.lock)
proc.go#L1480: lock(&sched.lock)
proc.go#L1481: sched.nmfreed++
proc.go#L1483: unlock(&sched.lock)
proc.go#L1502: lock(&sched.lock)
proc.go#L1521: m.freelink = sched.freem
proc.go#L1522: sched.freem = m
proc.go#L1524: unlock(&sched.lock)
proc.go#L1535: lock(&sched.lock)
proc.go#L1536: sched.nmfreed++
proc.go#L1538: unlock(&sched.lock)
proc.go#L1580: lock(&sched.lock)
proc.go#L1581: if sched.safePointWait != 0 {
proc.go#L1584: sched.safePointWait = gomaxprocs - 1
proc.go#L1585: sched.safePointFn = fn
proc.go#L1601: for p := sched.pidle.ptr(); p != nil; p = p.link.ptr() {
proc.go#L1604: sched.safePointWait--
proc.go#L1608: wait := sched.safePointWait > 0
proc.go#L1609: unlock(&sched.lock)
proc.go#L1635: if notetsleep(&sched.safePointNote, 100*1000) {
proc.go#L1636: noteclear(&sched.safePointNote)
proc.go#L1642: if sched.safePointWait != 0 {
proc.go#L1651: lock(&sched.lock)
proc.go#L1652: sched.safePointFn = nil
proc.go#L1653: unlock(&sched.lock)
proc.go#L1676: sched.safePointFn(p)
proc.go#L1677: lock(&sched.lock)
proc.go#L1678: sched.safePointWait--
proc.go#L1679: if sched.safePointWait == 0 {
proc.go#L1680: notewakeup(&sched.safePointNote)
proc.go#L1682: unlock(&sched.lock)
proc.go#L1720: if sched.freem != nil {
proc.go#L1721: lock(&sched.lock)
proc.go#L1723: for freem := sched.freem; freem != nil; {
proc.go#L1739: sched.freem = newList
proc.go#L1740: unlock(&sched.lock)
proc.go#L1864: atomic.Xadd(&sched.ngsys, -1)
proc.go#L1915: gp.goid = int64(atomic.Xadd64(&sched.goidgen, 1))
proc.go#L1926: atomic.Xadd(&sched.ngsys, +1)
proc.go#L1967: atomic.Xadd(&sched.ngsys, +1)
proc.go#L2184: lock(&sched.lock)
proc.go#L2185: sched.nmsys++
proc.go#L2187: unlock(&sched.lock)
proc.go#L2225: lock(&sched.lock)
proc.go#L2227: unlock(&sched.lock)
proc.go#L2267: lock(&sched.lock)
proc.go#L2271: unlock(&sched.lock)
proc.go#L2275: if int32(atomic.Xadd(&sched.nmspinning, -1)) < 0 {
proc.go#L2298: unlock(&sched.lock)
proc.go#L2311: unlock(&sched.lock)
proc.go#L2338: if !runqempty(_p_) || sched.runqsize != 0 {
proc.go#L2349: if atomic.Load(&sched.nmspinning)+atomic.Load(&sched.npidle) == 0 && atomic.Cas(&sched.nmspinning, 0, 1) { // TODO: fast atomic
proc.go#L2353: lock(&sched.lock)
proc.go#L2354: if sched.gcwaiting != 0 {
proc.go#L2356: sched.stopwait--
proc.go#L2357: if sched.stopwait == 0 {
proc.go#L2358: notewakeup(&sched.stopnote)
proc.go#L2360: unlock(&sched.lock)
proc.go#L2364: sched.safePointFn(_p_)
proc.go#L2365: sched.safePointWait--
proc.go#L2366: if sched.safePointWait == 0 {
proc.go#L2367: notewakeup(&sched.safePointNote)
proc.go#L2370: if sched.runqsize != 0 {
proc.go#L2371: unlock(&sched.lock)
proc.go#L2377: if sched.npidle == uint32(gomaxprocs-1) && atomic.Load64(&sched.lastpoll) != 0 {
proc.go#L2378: unlock(&sched.lock)
proc.go#L2387: unlock(&sched.lock)
proc.go#L2397: if atomic.Load(&sched.npidle) == 0 {
proc.go#L2401: if atomic.Load(&sched.nmspinning) != 0 || !atomic.Cas(&sched.nmspinning, 0, 1) {
proc.go#L2459: if sched.gcwaiting == 0 {
proc.go#L2466: if int32(atomic.Xadd(&sched.nmspinning, -1)) < 0 {
proc.go#L2471: lock(&sched.lock)
proc.go#L2473: sched.stopwait--
proc.go#L2474: if sched.stopwait == 0 {
proc.go#L2475: notewakeup(&sched.stopnote)
proc.go#L2477: unlock(&sched.lock)
proc.go#L2506: hz := sched.profilehz
proc.go#L2534: if sched.gcwaiting != 0 {
proc.go#L2559: if sched.runqsize != 0 {
proc.go#L2560: lock(&sched.lock)
proc.go#L2562: unlock(&sched.lock)
proc.go#L2575: if netpollinited() && atomic.Load(&netpollWaiters) > 0 && atomic.Load64(&sched.lastpoll) != 0 {
proc.go#L2593: if _g_.m.spinning || 2*atomic.Load(&sched.nmspinning) < procs-atomic.Load(&sched.npidle) {
proc.go#L2596: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2661: lock(&sched.lock)
proc.go#L2662: if sched.gcwaiting != 0 || _p_.runSafePointFn != 0 {
proc.go#L2663: unlock(&sched.lock)
proc.go#L2666: if sched.runqsize != 0 {
proc.go#L2668: unlock(&sched.lock)
proc.go#L2675: unlock(&sched.lock)
proc.go#L2700: if int32(atomic.Xadd(&sched.nmspinning, -1)) < 0 {
proc.go#L2715: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2724: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2745: if netpollinited() && (atomic.Load(&netpollWaiters) > 0 || pollUntil != 0) && atomic.Xchg64(&sched.lastpoll, 0) != 0 {
proc.go#L2746: atomic.Store64(&sched.pollUntil, uint64(pollUntil))
proc.go#L2768: atomic.Store64(&sched.pollUntil, 0)
proc.go#L2769: atomic.Store64(&sched.lastpoll, uint64(nanotime()))
proc.go#L2776: lock(&sched.lock)
proc.go#L2778: unlock(&sched.lock)
proc.go#L2794: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2799: pollerPollUntil := int64(atomic.Load64(&sched.pollUntil))
proc.go#L2813: if sched.runqsize != 0 {
proc.go#L2820: if netpollinited() && atomic.Load(&netpollWaiters) > 0 && sched.lastpoll != 0 {
proc.go#L2845: if sched.gcwaiting != 0 {
proc.go#L2912: lock(&sched.lock)
proc.go#L2914: unlock(&sched.lock)
proc.go#L2974: lock(&sched.lock)
proc.go#L2977: unlock(&sched.lock)
proc.go#L2985: unlock(&sched.lock)
proc.go#L2992: unlock(&sched.lock)
proc.go#L2996: unlock(&sched.lock)
proc.go#L3005: if atomic.Load64(&sched.lastpoll) == 0 {
proc.go#L3010: pollerPollUntil := int64(atomic.Load64(&sched.pollUntil))
proc.go#L3029: nmspinning := atomic.Xadd(&sched.nmspinning, -1)
proc.go#L3075: for ; n != 0 && sched.npidle != 0; n-- {
proc.go#L3082: lock(&sched.lock)
proc.go#L3084: unlock(&sched.lock)
proc.go#L3089: npidle := int(atomic.Load(&sched.npidle))
proc.go#L3097: lock(&sched.lock)
proc.go#L3099: unlock(&sched.lock)
proc.go#L3133: if sched.gcwaiting != 0 {
proc.go#L3175: if _g_.m.p.ptr().schedtick%61 == 0 && sched.runqsize > 0 {
proc.go#L3176: lock(&sched.lock)
proc.go#L3178: unlock(&sched.lock)
proc.go#L3197: if sched.disable.user && !schedEnabled(gp) {
proc.go#L3201: lock(&sched.lock)
proc.go#L3205: unlock(&sched.lock)
proc.go#L3207: sched.disable.runnable.pushBack(gp)
proc.go#L3208: sched.disable.n++
proc.go#L3209: unlock(&sched.lock)
proc.go#L3347: lock(&sched.lock)
proc.go#L3349: unlock(&sched.lock)
proc.go#L3460: atomic.Xadd(&sched.ngsys, -1)
proc.go#L3619: if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3637: if sched.gcwaiting != 0 {
proc.go#L3656: lock(&sched.lock)
proc.go#L3657: if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3658: atomic.Store(&sched.sysmonwait, 0)
proc.go#L3659: notewakeup(&sched.sysmonnote)
proc.go#L3661: unlock(&sched.lock)
proc.go#L3668: lock(&sched.lock)
proc.go#L3669: if sched.stopwait > 0 && atomic.Cas(&_p_.status, _Psyscall, _Pgcstop) {
proc.go#L3675: if sched.stopwait--; sched.stopwait == 0 {
proc.go#L3676: notewakeup(&sched.stopnote)
proc.go#L3679: unlock(&sched.lock)
proc.go#L3780: if sched.disable.user && !schedEnabled(_g_) {
proc.go#L3823: if sched.stopwait == freezeStopWait {
proc.go#L3836: if sched.pidle != 0 {
proc.go#L3882: lock(&sched.lock)
proc.go#L3884: if _p_ != nil && atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3885: atomic.Store(&sched.sysmonwait, 0)
proc.go#L3886: notewakeup(&sched.sysmonnote)
proc.go#L3888: unlock(&sched.lock)
proc.go#L3905: lock(&sched.lock)
proc.go#L3920: } else if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3921: atomic.Store(&sched.sysmonwait, 0)
proc.go#L3922: notewakeup(&sched.sysmonnote)
proc.go#L3924: unlock(&sched.lock)
proc.go#L4115: atomic.Xadd(&sched.ngsys, +1)
proc.go#L4134: _p_.goidcache = atomic.Xadd64(&sched.goidgen, _GoidCacheBatch)
proc.go#L4220: lock(&sched.gFree.lock)
proc.go#L4221: sched.gFree.noStack.pushAll(noStackQ)
proc.go#L4222: sched.gFree.stack.pushAll(stackQ)
proc.go#L4223: sched.gFree.n += inc
proc.go#L4224: unlock(&sched.gFree.lock)
proc.go#L4232: if _p_.gFree.empty() && (!sched.gFree.stack.empty() || !sched.gFree.noStack.empty()) {
proc.go#L4233: lock(&sched.gFree.lock)
proc.go#L4237: gp := sched.gFree.stack.pop()
proc.go#L4239: gp = sched.gFree.noStack.pop()
proc.go#L4244: sched.gFree.n--
proc.go#L4248: unlock(&sched.gFree.lock)
proc.go#L4293: lock(&sched.gFree.lock)
proc.go#L4294: sched.gFree.noStack.pushAll(noStackQ)
proc.go#L4295: sched.gFree.stack.pushAll(stackQ)
proc.go#L4296: sched.gFree.n += inc
proc.go#L4297: unlock(&sched.gFree.lock)
proc.go#L4410: n := int32(atomic.Loaduintptr(&allglen)) - sched.gFree.n - int32(atomic.Load(&sched.ngsys))
proc.go#L4424: return int32(sched.mnext - sched.nmfreed)
proc.go#L4580: lock(&sched.lock)
proc.go#L4581: sched.profilehz = hz
proc.go#L4582: unlock(&sched.lock)
proc.go#L4634: assertLockHeld(&sched.lock)
proc.go#L4724: assertLockHeld(&sched.lock)
proc.go#L4737: if sched.procresizetime != 0 {
proc.go#L4738: sched.totaltime += int64(old) * (now - sched.procresizetime)
proc.go#L4740: sched.procresizetime = now
proc.go#L4924: lock(&sched.lock)
proc.go#L4925: sched.nmidlelocked += v
proc.go#L4929: unlock(&sched.lock)
proc.go#L4936: assertLockHeld(&sched.lock)
proc.go#L4967: run := mcount() - sched.nmidle - sched.nmidlelocked - sched.nmsys
proc.go#L4972: print("runtime: checkdead: nmidle=", sched.nmidle, " nmidlelocked=", sched.nmidlelocked, " mcount=", mcount(), " nmsys=", sched.nmsys, "\n")
proc.go#L4994: unlock(&sched.lock) // unlock so that GODEBUG=scheddetail=1 doesn't hang
proc.go#L5003: for pp := &sched.pidle; *pp != 0; pp = &(*pp).ptr().link {
proc.go#L5029: unlock(&sched.lock) // unlock so that GODEBUG=scheddetail=1 doesn't hang
proc.go#L5048: lock(&sched.lock)
proc.go#L5049: sched.nmsys++
proc.go#L5051: unlock(&sched.lock)
proc.go#L5084: if debug.schedtrace <= 0 && (sched.gcwaiting != 0 || atomic.Load(&sched.npidle) == uint32(gomaxprocs)) {
proc.go#L5085: lock(&sched.lock)
proc.go#L5086: if atomic.Load(&sched.gcwaiting) != 0 || atomic.Load(&sched.npidle) == uint32(gomaxprocs) {
proc.go#L5090: atomic.Store(&sched.sysmonwait, 1)
proc.go#L5091: unlock(&sched.lock)
proc.go#L5102: syscallWake = notetsleep(&sched.sysmonnote, sleep)
proc.go#L5106: lock(&sched.lock)
proc.go#L5107: atomic.Store(&sched.sysmonwait, 0)
proc.go#L5108: noteclear(&sched.sysmonnote)
proc.go#L5115: unlock(&sched.lock)
proc.go#L5118: lock(&sched.sysmonlock)
proc.go#L5128: lastpoll := int64(atomic.Load64(&sched.lastpoll))
proc.go#L5130: atomic.Cas64(&sched.lastpoll, uint64(lastpoll), uint64(now))
proc.go#L5189: unlock(&sched.sysmonlock)
proc.go#L5246: if runqempty(_p_) && atomic.Load(&sched.nmspinning)+atomic.Load(&sched.npidle) > 0 && pd.syscallwhen+10*1000*1000 > now {
proc.go#L5336: lock(&sched.lock)
proc.go#L5337: print("SCHED ", (now-starttime)/1e6, "ms: gomaxprocs=", gomaxprocs, " idleprocs=", sched.npidle, " threads=", mcount(), " spinningthreads=", sched.nmspinning, " idlethreads=", sched.nmidle, " runqueue=", sched.runqsize)
proc.go#L5339: print(" gcwaiting=", sched.gcwaiting, " nmidlelocked=", sched.nmidlelocked, " stopwait=", sched.stopwait, " sysmonwait=", sched.sysmonwait, "\n")
proc.go#L5369: unlock(&sched.lock)
proc.go#L5405: unlock(&sched.lock)
proc.go#L5414: lock(&sched.lock)
proc.go#L5415: if sched.disable.user == !enable {
proc.go#L5416: unlock(&sched.lock)
proc.go#L5419: sched.disable.user = !enable
proc.go#L5421: n := sched.disable.n
proc.go#L5422: sched.disable.n = 0
proc.go#L5423: globrunqputbatch(&sched.disable.runnable, n)
proc.go#L5424: unlock(&sched.lock)
proc.go#L5425: for ; n != 0 && sched.npidle != 0; n-- {
proc.go#L5429: unlock(&sched.lock)
proc.go#L5438: assertLockHeld(&sched.lock)
proc.go#L5440: if sched.disable.user {
proc.go#L5451: assertLockHeld(&sched.lock)
proc.go#L5453: mp.schedlink = sched.midle
proc.go#L5454: sched.midle.set(mp)
proc.go#L5455: sched.nmidle++
proc.go#L5464: assertLockHeld(&sched.lock)
proc.go#L5466: mp := sched.midle.ptr()
proc.go#L5468: sched.midle = mp.schedlink
proc.go#L5469: sched.nmidle--
proc.go#L5479: assertLockHeld(&sched.lock)
proc.go#L5481: sched.runq.pushBack(gp)
proc.go#L5482: sched.runqsize++
proc.go#L5490: assertLockHeld(&sched.lock)
proc.go#L5492: sched.runq.push(gp)
proc.go#L5493: sched.runqsize++
proc.go#L5502: assertLockHeld(&sched.lock)
proc.go#L5504: sched.runq.pushBackAll(*batch)
proc.go#L5505: sched.runqsize += n
proc.go#L5512: assertLockHeld(&sched.lock)
proc.go#L5514: if sched.runqsize == 0 {
proc.go#L5518: n := sched.runqsize/gomaxprocs + 1
proc.go#L5519: if n > sched.runqsize {
proc.go#L5520: n = sched.runqsize
proc.go#L5529: sched.runqsize -= n
proc.go#L5531: gp := sched.runq.pop()
proc.go#L5534: gp1 := sched.runq.pop()
proc.go#L5614: assertLockHeld(&sched.lock)
proc.go#L5621: _p_.link = sched.pidle
proc.go#L5622: sched.pidle.set(_p_)
proc.go#L5623: atomic.Xadd(&sched.npidle, 1) // TODO: fast atomic
proc.go#L5633: assertLockHeld(&sched.lock)
proc.go#L5635: _p_ := sched.pidle.ptr()
proc.go#L5640: sched.pidle = _p_.link
proc.go#L5641: atomic.Xadd(&sched.npidle, -1) // TODO: fast atomic
proc.go#L5747: lock(&sched.lock)
proc.go#L5749: unlock(&sched.lock)
proc.go#L5781: lock(&sched.lock)
proc.go#L5783: unlock(&sched.lock)
proc.go#L6034: lock(&sched.lock)
proc.go#L6035: out = int(sched.maxmcount)
proc.go#L6037: sched.maxmcount = 0x7fffffff
proc.go#L6039: sched.maxmcount = int32(in)
proc.go#L6042: unlock(&sched.lock)
proc.go#L6094: if i >= active_spin || ncpu <= 1 || gomaxprocs <= int32(sched.npidle+sched.nmspinning)+1 {
runtime2.go#L1086: sched schedt
trace.go#L193: lock(&sched.sysmonlock)
trace.go#L204: unlock(&sched.sysmonlock)
trace.go#L277: unlock(&sched.sysmonlock)
trace.go#L291: lock(&sched.sysmonlock)
trace.go#L298: unlock(&sched.sysmonlock)
trace.go#L336: unlock(&sched.sysmonlock)